// --------------------------------------------------------------------------------------------
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
// 
// The contents of this file are subject to the Mozilla Public License Version
// 1.1 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
// http://www.mozilla.org/MPL/
// 
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// for the specific language governing rights and limitations under the
// License.
// 
// <remarks>
// Generated by IDLImporter from file nsITransaction.idl
// 
// You should use these interfaces when you access the COM objects defined in the mentioned
// IDL/IDH file.
// </remarks>
// --------------------------------------------------------------------------------------------
namespace Gecko
{
	using System;
	using System.Runtime.InteropServices;
	using System.Runtime.InteropServices.ComTypes;
	using System.Runtime.CompilerServices;
	
	
	/// <summary>
    /// The nsITransaction interface.
    /// <P>
    /// This interface is implemented by an object that needs to
    /// execute some behavior that must be tracked by the transaction manager.
    /// </summary>
	[ComImport()]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("58e330c1-7b48-11d2-98b9-00805f297d89")]
	public interface nsITransaction
	{
		
		/// <summary>
        /// Executes the transaction.
        /// </summary>
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
		void DoTransaction();
		
		/// <summary>
        /// Restores the state to what it was before the transaction was executed.
        /// </summary>
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
		void UndoTransaction();
		
		/// <summary>
        /// Executes the transaction again. Can only be called on a transaction that
        /// was previously undone.
        /// <P>
        /// In most cases, the redoTransaction() method will actually call the
        /// doTransaction() method to execute the transaction again.
        /// </summary>
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
		void RedoTransaction();
		
		/// <summary>
        /// The transaction's transient state. This attribute is checked by
        /// the transaction manager after the transaction's Execute() method is called.
        /// If the transient state is false, a reference to the transaction is
        /// held by the transaction manager so that the transactions' undoTransaction()
        /// and redoTransaction() methods can be called. If the transient state is
        /// true, the transaction manager returns immediately after the transaction's
        /// doTransaction() method is called, no references to the transaction are
        /// maintained. Transient transactions cannot be undone or redone by the
        /// transaction manager.
        /// </summary>
		[return: MarshalAs(UnmanagedType.U1)]
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
		bool GetIsTransientAttribute();
		
		/// <summary>
        /// Attempts to merge a transaction into "this" transaction. Both transactions
        /// must be in their undo state, doTransaction() methods already called. The
        /// transaction manager calls this method to coalesce a new transaction with
        /// the transaction on the top of the undo stack.
        /// This method returns a boolean value that indicates the merge result.
        /// A true value indicates that the transactions were merged successfully,
        /// a false value if the merge was not possible or failed. If true,
        /// the transaction manager will Release() the new transacton instead of
        /// pushing it on the undo stack.
        /// @param aTransaction the previously executed transaction to merge.
        /// </summary>
		[return: MarshalAs(UnmanagedType.U1)]
		[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
		bool Merge([MarshalAs(UnmanagedType.Interface)] nsITransaction aTransaction);
	}
}
